package com.rdgzs.authority.dao.impl;



import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.rdgzs.authority.dao.IUserDao;
import com.rdgzs.authority.entity.User;
import com.rdgzs.authority.service.UserService;
import com.rdgzs.base.utils.Pagination;
import com.rdgzs.framework.utilsTools.UtilsObject;

/**
* ###################################################
* @创建日期：2014-3-4 18:01:08
* @开发人员：李广彬
* @功能描述：
* @修改日志：splitId 分库标准【一般是当前用户】
* ###################################################
*/
@Repository
public class UserDaoImpl implements IUserDao {
	private static final Log logger = LogFactory.getLog(UserService.class);
	public static final String NS="com.rdgzs.authority.entity.User";
	@Autowired
	private SqlSessionTemplate sqlSession;
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public User get(Long id){
		return (User)query("id", id).get(0);
	}
	
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public List<User> query(String columnVar,Object val){
		Map params=new HashMap();
		params.put(columnVar,val);
		return sqlSession.selectList(NS+".query", params);
	}
	
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public List<User> query(String columnVar,Object val,String orderBy,String order){
		Map params=new HashMap();
		params.put(columnVar,val);
		params.put("orderBy",orderBy);
		params.put("order",order);
		return sqlSession.selectList(NS+".query", params);
	}
	
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public List<User> query(User user)  throws Exception{
		Map params=UtilsObject.obj2map(user);
		return sqlSession.selectList(NS+".query", params);
	}
	
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public List<User> query(User user,String orderBy,String order)  throws Exception{
		Map params=UtilsObject.obj2map(user);
		params.put("orderBy",orderBy);
		params.put("order",order);
		return sqlSession.selectList(NS+".query", params);
	}
	
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public Pagination query(Pagination page,User user) throws Exception{
		Map params=UtilsObject.obj2map(user);
		params.put("orderBy",page.getOrderBy());
		params.put("order",page.getOrder());
		params.put("start", page.getPageStart());
        params.put("end", page.getPageSize());
        params.putAll(page.queryOtherParam());
        List items=sqlSession.selectList(NS+".query", params);
        Integer total=count(user);
        
        page.setItems(items);
        page.setTotalRecord(total);
		return page;
	}
	
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public String save(User user){
		user.setCreateTime(new Date());
		sqlSession.insert(NS+".insert", user);
		return user.getId();
	}
	
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public String save(List<User> entityList){
		for(User entity:entityList){
			entity.setCreateTime(new Date());
		}
		sqlSession.insert(NS+".insertBatch", entityList);
		return null;
	}
	

	
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public Integer update(User v_User,User w_User) throws Exception{
		Map params=new HashMap();
		Map values=UtilsObject.obj2map(v_User,"v_");
		Map wheres=UtilsObject.obj2map(w_User);
		params.putAll(values);
		params.putAll(wheres);
		return sqlSession.update(NS+".update", params);
	}
	
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public Integer update(User user) throws Exception{
		if(user.getId()==null){
			throw new Exception("单条更新  缺少必要的主键！");
		}
		Map params=UtilsObject.obj2map(user,"v_");
		params.put("id",user.getId());
		return sqlSession.update(NS+".update", params);
	}
	
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public Integer delete(Long id){
		return (Integer)sqlSession.delete(NS+".deleteLogic", id);
	}
	
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public Integer delete(User user){
		return (Integer)sqlSession.delete(NS+".deleteLogicBatch", user);
	}
	
	/**
	* @创建日期：2014-3-4 18:01:08
	* @开发人员：李广彬
	* @功能描述：
	* @传入参数：
	*/
	public Integer count(User user) throws Exception{
		Map params=UtilsObject.obj2map(user);
		return (Integer)sqlSession.selectOne(NS+".query_count", params);
	}

	@Override
	public User get(String id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Integer delete(String id) {
		// TODO Auto-generated method stub
		return null;
	}
	


}


